Αυτό που ζητάει ο Μάνος δεν έχει να κάνει με το πως μετατρέπεις ένα SQL statement σε LINQ. Το LINQ to Dataset είναι κομματάκι περίεργο και θέλει τα δικά του κόλπα. Ο Μάρκος έχει δίκιο, στα samples θα βρεις πως γίνονται τα διάφορα aggregations, groupings κλπ.
Όσον αφορά την αρχική ερώτηση, το query μπορείς να το γράψεις κάπως έτσι:
var largeOrders = from order in nwSet.Orders.AsEnumerable()
where order.Amount> 5
group order by order.CustomerID
into customerOrders
orderby customerOrders.Key
select new {CustomerID=customerOrders.Key, Total = customerOrders.Sum(o => o.Amount)};
Μετά τα πράγματα γίνονται λίγο περίεργα. Μπορείς να μετατρέψεις τα αποτελέσματα ενός Linq to Dataset query σε DataTable με την CopyToDataTable εφόσον το αποτέλεσμα του query μετατρέπεται σε Datarow. Θα μπορούσες δηλαδή να γράψεις DataTable myTable=largeOrders.CopyToDataTable<DataRow>(). Δυστυχώς, το select επιστρέφει ένα anonymous type το οποίο δεν μετατρέπεται σε DataRow. Ούτε το group customerOrders μπορεί να μετατραπεί σε DataRow και τέλος το DataRow δεν έχει κάποιο constructor τον οποίο να μπορείς να χρησιμοποιήσεις και να γράψεις π.χ. new DataRow(CustomerID ...
Η μόνη λύση που βρήκα μέχρι στιγμής είναι να γεμίσω ένα πίνακα με το χέρι με τα αποτελέσματα του query
DataTable newTable=new DataTable();
newTable.Columns.Add("CustomerID", typeof (string));
newTable.Columns.Add("Total", typeof (decimal));
foreach (var order in largeOrders)
{
newTable.Rows.Add(order.CustomerID, order.Total);
}
Δεν είναι αυτό που θα ήθελα, αλλά τώρα μπορώ να χρησιμοποιήσω τον πίνακα π.χ. για data binding. Ακόμα καλύτερα, μπορώ να φτιάξω ένα πίνακα στο DataSet π.χ. LargeOrdersDataTable και να χρησιμοποιήσω αυτό τον τύπο αντί για χύμα DataTable.
Υ.Γ. Για να δουλέψουν τα extension methods τα οποία αφορούν Datasets πρέπει οπωσδήποτε να προστεθεί το using System.Data.DataSetExtensions;
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos